// 商品单位状态管理store
import { store } from "@/store";
import GoodsAPI, { type UomItem, type UomFormData } from "@/api/goods/goods";

/**
 * 创建单位管理store
 * 包含单位列表和获取单位的方法
 */
export const useUomStore = defineStore("uom", () => {
  // 存储单位列表的响应式引用
  const list = ref<UomItem[]>([]);
  // 定义一个响应式对象，用于跟踪不同操作的加载状态
  const loading = reactive({
    list: false, // 单位列表加载状态
    create: false, // 创建单位加载状态
    update: false, // 更新单位加载状态
    delete: false, // 删除单位加载状态
  });

  /**
   * 获取商品单位列表
   * @returns Promise 包含API响应结果
   */
  async function fetchUomList() {
    try {
      // 开始加载单位列表，设置加载状态为true
      loading.list = true;
      // 调用GoodsAPI的getCategories方法获取单位列表
      const response = await GoodsAPI.getUom();
      // 单位列表加载完成，设置加载状态为false
      loading.list = false;
      // 如果响应存在，更新单位列表
      if (response) {
        list.value = response;
        return response;
      }
    } catch (error) {
      // 加载出错，设置加载状态为false
      loading.list = false;
      // 抛出错误
      throw error;
    }
  }

  /**
   * 创建新的商品单位
   * @param data 单位表单数据对象
   * @returns Promise 包含API响应结果
   */
  async function fetchCreateUom(data: UomFormData) {
    try {
      // 开始创建单位，设置加载状态为true
      loading.create = true;
      // 调用GoodsAPI的createUom方法创建单位
      const response = await GoodsAPI.createUom(data);
      // 单位创建完成，设置加载状态为false
      loading.create = false;
      // 如果响应存在，返回响应结果
      if (response) {
        return response;
      }
    } catch (error) {
      // 创建出错，设置加载状态为false
      loading.create = false;
      // 抛出错误
      throw error;
    }
  }

  /**
   * 删除指定ID的商品单位
   * @param id 要删除的单位的ID
   * @returns Promise 包含API响应结果
   */
  async function fetchDeleteUom(id: number) {
    try {
      // 开始删除单位，设置加载状态为true
      loading.delete = true;
      // 调用GoodsAPI的deleteUom方法删除单位
      const response = await GoodsAPI.deleteUom(id);
      // 单位删除完成，设置加载状态为false
      loading.delete = false;
      // 如果响应存在，返回响应结果
      if (response) {
        return response;
      }
    } catch (error) {
      // 删除出错，设置加载状态为false
      loading.delete = false;
      // 抛出错误
      throw error;
    }
  }

  /**
   * 更新商品单位信息
   * @param data 包含单位ID和更新数据的表单数据对象
   * @returns Promise 包含API响应结果
   */
  async function fetchUpdateUom(data: UomFormData) {
    try {
      // 开始更新单位，设置加载状态为true
      loading.update = true;
      // 调用GoodsAPI的updateUom方法更新单位
      const response = await GoodsAPI.updateUom(data.id, data);
      // 单位更新完成，设置加载状态为false
      loading.update = false;
      // 如果响应存在，返回响应结果
      if (response) {
        return response;
      }
    } catch (error) {
      // 更新出错，设置加载状态为false
      loading.update = false;
      // 抛出错误
      throw error;
    }
  }

  return {
    list,
    loading,
    fetchUomList,
    fetchCreateUom,
    fetchDeleteUom,
    fetchUpdateUom,
  };
});

/**
 * 提供在组件中使用的单位store hook
 * @returns 单位管理store实例
 */
export default function useUomStoreHook() {
  return useUomStore(store);
}
